Generated by Cython 3.0.2
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: noise_add_simplex.c
+001: # cython: infer_types=True, wraparound=False, nonecheck=False, boundscheck=False, cdivision=True, language_level=3, profile=False, autogen_pxd=True
__pyx_t_10 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_10) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
002:
003: # Import necessary libraries
+004: import numpy as np
__pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
005:
006: cimport numpy as np
007: from libc.stdlib cimport free, malloc
008:
009: from cython.parallel import prange
010:
011:
+012: def get_simplex_noise(int rows, int columns, *args, **kwargs):
/* Python wrapper */ static PyObject *__pyx_pw_7nanopyx_4core_8generate_17noise_add_simplex_1get_simplex_noise(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_8generate_17noise_add_simplex_get_simplex_noise, "\n Get a simplex noise image\n :param rows: The number of rows\n :type rows: int\n :param columns: The number of columns\n :type columns: int\n :param args: The arguments to pass to the simplex noise function (see :func:`add_simplex_noise`)\n :param kwargs: The keyword arguments to pass to the simplex noise function\n :return: The simplex noise image\n :rtype: np.ndarray\n "); static PyMethodDef __pyx_mdef_7nanopyx_4core_8generate_17noise_add_simplex_1get_simplex_noise = {"get_simplex_noise", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7nanopyx_4core_8generate_17noise_add_simplex_1get_simplex_noise, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7nanopyx_4core_8generate_17noise_add_simplex_get_simplex_noise}; static PyObject *__pyx_pw_7nanopyx_4core_8generate_17noise_add_simplex_1get_simplex_noise(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { int __pyx_v_rows; int __pyx_v_columns; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_simplex_noise (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(0, 12, __pyx_L3_error) #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 2, __pyx_nargs); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rows,&__pyx_n_s_columns,0}; PyObject* values[2] = {0,0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { default: case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; } kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rows)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_columns)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("get_simplex_noise", 0, 2, 2, 1); __PYX_ERR(0, 12, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; const Py_ssize_t used_pos_args = (kwd_pos_args < 2) ? kwd_pos_args : 2; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values + 0, used_pos_args, "get_simplex_noise") < 0)) __PYX_ERR(0, 12, __pyx_L3_error) } } else if (unlikely(__pyx_nargs < 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_rows = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rows == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) __pyx_v_columns = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_columns == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get_simplex_noise", 0, 2, 2, __pyx_nargs); __PYX_ERR(0, 12, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("nanopyx.core.generate.noise_add_simplex.get_simplex_noise", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7nanopyx_4core_8generate_17noise_add_simplex_get_simplex_noise(__pyx_self, __pyx_v_rows, __pyx_v_columns, __pyx_v_args, __pyx_v_kwargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_DECREF(__pyx_v_args); __Pyx_DECREF(__pyx_v_kwargs); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7nanopyx_4core_8generate_17noise_add_simplex_get_simplex_noise(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_rows, int __pyx_v_columns, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { PyObject *__pyx_v_frames = NULL; PyObject *__pyx_v_image = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_simplex_noise", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("nanopyx.core.generate.noise_add_simplex.get_simplex_noise", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_frames); __Pyx_XDECREF(__pyx_v_image); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__24 = PyTuple_Pack(6, __pyx_n_s_rows, __pyx_n_s_columns, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_frames, __pyx_n_s_image); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); /* … */ __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_7nanopyx_4core_8generate_17noise_add_simplex_1get_simplex_noise, 0, __pyx_n_s_get_simplex_noise, NULL, __pyx_n_s_nanopyx_core_generate_noise_add, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_simplex_noise, __pyx_t_7) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_nanopyx_core_generate_noise, __pyx_n_s_get_simplex_noise, 12, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 12, __pyx_L1_error)
013: """
014: Get a simplex noise image
015: :param rows: The number of rows
016: :type rows: int
017: :param columns: The number of columns
018: :type columns: int
019: :param args: The arguments to pass to the simplex noise function (see :func:`add_simplex_noise`)
020: :param kwargs: The keyword arguments to pass to the simplex noise function
021: :return: The simplex noise image
022: :rtype: np.ndarray
023: """
+024: if "frames" in kwargs:
__pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_frames, __pyx_v_kwargs, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 24, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L3; }
+025: frames = kwargs["frames"]
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_kwargs, __pyx_n_u_frames); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_frames = __pyx_t_2; __pyx_t_2 = 0;
+026: image = np.zeros((frames, rows, columns), dtype=np.float32)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_frames); __Pyx_GIVEREF(__pyx_v_frames); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_frames)) __PYX_ERR(0, 26, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_image = __pyx_t_6; __pyx_t_6 = 0;
+027: del kwargs["frames"]
if (unlikely((PyDict_DelItem(__pyx_v_kwargs, __pyx_n_u_frames) < 0))) __PYX_ERR(0, 27, __pyx_L1_error)
028: else:
+029: image = np.zeros((rows, columns), dtype=np.float32)
/*else*/ {
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_rows); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_6);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6)) __PYX_ERR(0, 29, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_4);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error);
__pyx_t_6 = 0;
__pyx_t_4 = 0;
__pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_3);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error);
__pyx_t_3 = 0;
__pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_v_image = __pyx_t_2;
__pyx_t_2 = 0;
}
__pyx_L3:;
+030: add_simplex_noise(image, *args, **kwargs)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_add_simplex_noise); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_image); __Pyx_GIVEREF(__pyx_v_image); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_image)) __PYX_ERR(0, 30, __pyx_L1_error); __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 30, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+031: return image
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_image); __pyx_r = __pyx_v_image; goto __pyx_L0;
032:
033:
+034: def add_simplex_noise(dataset: np.ndarray, double frequency = 0.01, int octaves = 4, double persistence = 2, double amplitude = 1000, double offset = 1000, int seed = -1):
/* Python wrapper */ static PyObject *__pyx_pw_7nanopyx_4core_8generate_17noise_add_simplex_3add_simplex_noise(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_8generate_17noise_add_simplex_2add_simplex_noise, "\n Add simplex noise to a 2D numpy array.\n :param im: The 2D numpy array to add noise to.\n :param frequency: The frequency of the noise.\n :param octaves: The number of octaves to use.\n :param persistence: The persistence of the noise.\n :param amplitude: The amplitude of the noise.\n :param offset: The offset of the noise.\n :param seed: The seed to use for the noise generator, if -1 a random seed will be used.\n "); static PyMethodDef __pyx_mdef_7nanopyx_4core_8generate_17noise_add_simplex_3add_simplex_noise = {"add_simplex_noise", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7nanopyx_4core_8generate_17noise_add_simplex_3add_simplex_noise, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7nanopyx_4core_8generate_17noise_add_simplex_2add_simplex_noise}; static PyObject *__pyx_pw_7nanopyx_4core_8generate_17noise_add_simplex_3add_simplex_noise(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyArrayObject *__pyx_v_dataset = 0; double __pyx_v_frequency; int __pyx_v_octaves; double __pyx_v_persistence; double __pyx_v_amplitude; double __pyx_v_offset; int __pyx_v_seed; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("add_simplex_noise (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(0, 34, __pyx_L3_error) #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset,&__pyx_n_s_frequency,&__pyx_n_s_octaves,&__pyx_n_s_persistence,&__pyx_n_s_amplitude,&__pyx_n_s_offset,&__pyx_n_s_seed,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dataset)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency); if (value) { values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_octaves); if (value) { values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_persistence); if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amplitude); if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 5: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_offset); if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 6: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seed); if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "add_simplex_noise") < 0)) __PYX_ERR(0, 34, __pyx_L3_error) } } else { switch (__pyx_nargs) { case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_dataset = ((PyArrayObject *)values[0]); if (values[1]) { __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } else { __pyx_v_frequency = ((double)((double)0.01)); } if (values[2]) { __pyx_v_octaves = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_octaves == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } else { __pyx_v_octaves = ((int)((int)4)); } if (values[3]) { __pyx_v_persistence = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_persistence == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } else { __pyx_v_persistence = ((double)((double)2.0)); } if (values[4]) { __pyx_v_amplitude = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_amplitude == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } else { __pyx_v_amplitude = ((double)((double)1000.0)); } if (values[5]) { __pyx_v_offset = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_offset == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } else { __pyx_v_offset = ((double)((double)1000.0)); } if (values[6]) { __pyx_v_seed = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error) } else { __pyx_v_seed = ((int)((int)-1)); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("add_simplex_noise", 0, 1, 7, __pyx_nargs); __PYX_ERR(0, 34, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.generate.noise_add_simplex.add_simplex_noise", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dataset), __pyx_ptype_5numpy_ndarray, 0, "dataset", 0))) __PYX_ERR(0, 34, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_8generate_17noise_add_simplex_2add_simplex_noise(__pyx_self, __pyx_v_dataset, __pyx_v_frequency, __pyx_v_octaves, __pyx_v_persistence, __pyx_v_amplitude, __pyx_v_offset, __pyx_v_seed); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7nanopyx_4core_8generate_17noise_add_simplex_2add_simplex_noise(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_dataset, double __pyx_v_frequency, int __pyx_v_octaves, double __pyx_v_persistence, double __pyx_v_amplitude, double __pyx_v_offset, int __pyx_v_seed) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("add_simplex_noise", 0); __Pyx_INCREF((PyObject *)__pyx_v_dataset); /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __PYX_XCLEAR_MEMVIEW(&__pyx_t_7, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1); __Pyx_AddTraceback("nanopyx.core.generate.noise_add_simplex.add_simplex_noise", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_dataset); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__26 = PyTuple_Pack(7, __pyx_n_s_dataset, __pyx_n_s_frequency, __pyx_n_s_octaves, __pyx_n_s_persistence, __pyx_n_s_amplitude, __pyx_n_s_offset, __pyx_n_s_seed); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__26); __Pyx_GIVEREF(__pyx_tuple__26); /* … */ __pyx_t_7 = PyFloat_FromDouble(((double)0.01)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyInt_From_int(((int)4)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyFloat_FromDouble(((double)2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = PyFloat_FromDouble(((double)1000.0)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PyFloat_FromDouble(((double)1000.0)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyInt_From_int(((int)-1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyTuple_New(6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_9)) __PYX_ERR(0, 34, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_10); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_t_10)) __PYX_ERR(0, 34, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 5, __pyx_t_11)) __PYX_ERR(0, 34, __pyx_L1_error); __pyx_t_7 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dataset, __pyx_kp_s_np_ndarray) < 0) __PYX_ERR(0, 34, __pyx_L1_error) __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_7nanopyx_4core_8generate_17noise_add_simplex_3add_simplex_noise, 0, __pyx_n_s_add_simplex_noise, NULL, __pyx_n_s_nanopyx_core_generate_noise_add, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_t_12); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_10, __pyx_t_11); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_simplex_noise, __pyx_t_10) < 0) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
035: """
036: Add simplex noise to a 2D numpy array.
037: :param im: The 2D numpy array to add noise to.
038: :param frequency: The frequency of the noise.
039: :param octaves: The number of octaves to use.
040: :param persistence: The persistence of the noise.
041: :param amplitude: The amplitude of the noise.
042: :param offset: The offset of the noise.
043: :param seed: The seed to use for the noise generator, if -1 a random seed will be used.
044: """
+045: if seed == -1:
__pyx_t_1 = (__pyx_v_seed == -1L);
if (__pyx_t_1) {
/* … */
}
+046: seed = np.random.randint(0, 1000000)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_randint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_seed = __pyx_t_4; /* … */ __pyx_tuple__11 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1000000); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__11); __Pyx_GIVEREF(__pyx_tuple__11);
047:
+048: assert frequency > 0, "The frequency must be greater than 0."
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(__pyx_assertions_enabled())) {
__pyx_t_1 = (__pyx_v_frequency > 0.0);
if (unlikely(!__pyx_t_1)) {
__Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_u_The_frequency_must_be_greater_th, 0, 0);
__PYX_ERR(0, 48, __pyx_L1_error)
}
}
#else
if ((1)); else __PYX_ERR(0, 48, __pyx_L1_error)
#endif
+049: assert octaves > 0, "The number of octaves must be greater than 0."
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(__pyx_assertions_enabled())) {
__pyx_t_1 = (__pyx_v_octaves > 0);
if (unlikely(!__pyx_t_1)) {
__Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_u_The_number_of_octaves_must_be_gr, 0, 0);
__PYX_ERR(0, 49, __pyx_L1_error)
}
}
#else
if ((1)); else __PYX_ERR(0, 49, __pyx_L1_error)
#endif
+050: assert persistence > 0, "The persistence must be greater than 0."
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(__pyx_assertions_enabled())) {
__pyx_t_1 = (__pyx_v_persistence > 0.0);
if (unlikely(!__pyx_t_1)) {
__Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_u_The_persistence_must_be_greater, 0, 0);
__PYX_ERR(0, 50, __pyx_L1_error)
}
}
#else
if ((1)); else __PYX_ERR(0, 50, __pyx_L1_error)
#endif
051:
052: # Convert the imay to a 2D numpy array
+053: dataset = dataset.view(np.float32)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_dataset), __pyx_n_s_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = NULL; __pyx_t_4 = 0; #if CYTHON_UNPACK_METHODS if (likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); __pyx_t_4 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_DECREF_SET(__pyx_v_dataset, ((PyArrayObject *)__pyx_t_3)); __pyx_t_3 = 0;
054:
+055: if dataset.ndim == 2:
__pyx_t_4 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_dataset); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L1_error) __pyx_t_1 = (__pyx_t_4 == 2); if (__pyx_t_1) { /* … */ goto __pyx_L4; }
+056: _add_simplex_noise_2D(dataset, frequency, octaves, persistence, amplitude, offset, seed)
__pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(((PyObject *)__pyx_v_dataset), PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 56, __pyx_L1_error) __pyx_f_7nanopyx_4core_8generate_17noise_add_simplex__add_simplex_noise_2D(__pyx_t_7, __pyx_v_frequency, __pyx_v_octaves, __pyx_v_persistence, __pyx_v_amplitude, __pyx_v_offset, __pyx_v_seed); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L1_error) __PYX_XCLEAR_MEMVIEW(&__pyx_t_7, 1); __pyx_t_7.memview = NULL; __pyx_t_7.data = NULL;
+057: elif dataset.ndim == 3:
__pyx_t_4 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_dataset); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_t_1 = (__pyx_t_4 == 3); if (__pyx_t_1) { /* … */ goto __pyx_L4; }
+058: _add_simplex_noise_3D(dataset, frequency, octaves, persistence, amplitude, offset, seed)
__pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(((PyObject *)__pyx_v_dataset), PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 58, __pyx_L1_error) __pyx_f_7nanopyx_4core_8generate_17noise_add_simplex__add_simplex_noise_3D(__pyx_t_8, __pyx_v_frequency, __pyx_v_octaves, __pyx_v_persistence, __pyx_v_amplitude, __pyx_v_offset, __pyx_v_seed); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L1_error) __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1); __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
+059: elif dataset.ndim == 4:
__pyx_t_4 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_dataset); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 59, __pyx_L1_error) __pyx_t_1 = (__pyx_t_4 == 4); if (likely(__pyx_t_1)) { /* … */ goto __pyx_L4; }
+060: _add_simplex_noise_4D(dataset, frequency, octaves, persistence, amplitude, offset, seed)
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_float(((PyObject *)__pyx_v_dataset), PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 60, __pyx_L1_error) __pyx_f_7nanopyx_4core_8generate_17noise_add_simplex__add_simplex_noise_4D(__pyx_t_9, __pyx_v_frequency, __pyx_v_octaves, __pyx_v_persistence, __pyx_v_amplitude, __pyx_v_offset, __pyx_v_seed); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L1_error) __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1); __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
061: else:
+062: raise ValueError("The image must be 2D, 3D, or 4D.")
/*else*/ {
__pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 62, __pyx_L1_error)
}
__pyx_L4:;
/* … */
__pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_The_image_must_be_2D_3D_or_4D); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__12);
__Pyx_GIVEREF(__pyx_tuple__12);
063:
+064: cdef void _add_simplex_noise_2D(float[:,:] im, double frequency, int octaves, double persistence, double amplitude, double offset, int seed) nogil:
static void __pyx_f_7nanopyx_4core_8generate_17noise_add_simplex__add_simplex_noise_2D(__Pyx_memviewslice __pyx_v_im, double __pyx_v_frequency, int __pyx_v_octaves, double __pyx_v_persistence, double __pyx_v_amplitude, double __pyx_v_offset, int __pyx_v_seed) {
CYTHON_UNUSED int __pyx_v_rows;
int __pyx_v_cols;
double __pyx_v_noise;
int __pyx_v_r;
int __pyx_v_c;
int __pyx_v_o;
OpenSimplexEnv *__pyx_v_ose;
OpenSimplexGradients *__pyx_v_osg;
/* … */
/* function exit code */
}
+065: cdef int rows = im.shape[0]
__pyx_v_rows = (__pyx_v_im.shape[0]);
+066: cdef int cols = im.shape[1]
__pyx_v_cols = (__pyx_v_im.shape[1]);
067: cdef double noise
068: cdef int r, c, o
069:
070: # Initialize the noise generator
+071: cdef OpenSimplexEnv *ose = initOpenSimplex()
__pyx_v_ose = initOpenSimplex();
+072: cdef OpenSimplexGradients *osg = newOpenSimplexGradients(ose, seed)
__pyx_v_osg = newOpenSimplexGradients(__pyx_v_ose, __pyx_v_seed);
073:
074: # Loop through each element in the imay
+075: for r in prange(rows):
{
#ifdef WITH_THREAD
PyThreadState *_save;
_save = NULL;
if (PyGILState_Check()) {
Py_UNBLOCK_THREADS
}
__Pyx_FastGIL_Remember();
#endif
/*try:*/ {
__pyx_t_1 = __pyx_v_rows;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_3 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for lastprivate(__pyx_v_c) reduction(+:__pyx_v_noise) lastprivate(__pyx_v_o) firstprivate(__pyx_v_r) lastprivate(__pyx_v_r)
#endif /* _OPENMP */
for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
{
__pyx_v_r = (int)(0 + 1 * __pyx_t_2);
/* Initialize private variables to invalid values */
__pyx_v_c = ((int)0xbad0bad0);
__pyx_v_o = ((int)0xbad0bad0);
/* … */
/*finally:*/ {
/*normal exit:*/{
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
if (_save) {
Py_BLOCK_THREADS
}
#endif
goto __pyx_L5;
}
__pyx_L5:;
}
}
+076: for c in range(cols):
__pyx_t_4 = __pyx_v_cols;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_c = __pyx_t_6;
077: # Calculate the simplex noise for the current x,y position
+078: noise = 0
__pyx_v_noise = 0.0;
+079: for o in range(octaves):
__pyx_t_7 = __pyx_v_octaves;
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_o = __pyx_t_9;
+080: noise += (noise2(ose, osg, r * frequency * 2**o, c * frequency * 2**o) + 1) / 2 * persistence**o
__pyx_v_noise = (__pyx_v_noise + (((noise2(__pyx_v_ose, __pyx_v_osg, ((__pyx_v_r * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o))), ((__pyx_v_c * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o)))) + 1.0) / 2.0) * pow(__pyx_v_persistence, ((double)__pyx_v_o))));
}
081:
082: # Add the noise to the current imay element
+083: im[r,c] += noise * amplitude + offset
__pyx_t_10 = __pyx_v_r;
__pyx_t_11 = __pyx_v_c;
*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_im.data + __pyx_t_10 * __pyx_v_im.strides[0]) ) + __pyx_t_11 * __pyx_v_im.strides[1]) )) += ((__pyx_v_noise * __pyx_v_amplitude) + __pyx_v_offset);
}
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
084:
085: # Free the memory used by the OpenSimplex environment and gradients
+086: free(osg)
free(__pyx_v_osg);
+087: free(ose)
free(__pyx_v_ose);
088:
+089: cdef void _add_simplex_noise_3D(float[:,:,:] im, double frequency, int octaves, double persistence, double amplitude, double offset, int seed) nogil:
static void __pyx_f_7nanopyx_4core_8generate_17noise_add_simplex__add_simplex_noise_3D(__Pyx_memviewslice __pyx_v_im, double __pyx_v_frequency, int __pyx_v_octaves, double __pyx_v_persistence, double __pyx_v_amplitude, double __pyx_v_offset, int __pyx_v_seed) {
CYTHON_UNUSED int __pyx_v_rows;
int __pyx_v_cols;
int __pyx_v_depth;
double __pyx_v_noise;
int __pyx_v_r;
int __pyx_v_c;
int __pyx_v_d;
int __pyx_v_o;
OpenSimplexEnv *__pyx_v_ose;
OpenSimplexGradients *__pyx_v_osg;
/* … */
/* function exit code */
}
+090: cdef int rows = im.shape[0]
__pyx_v_rows = (__pyx_v_im.shape[0]);
+091: cdef int cols = im.shape[1]
__pyx_v_cols = (__pyx_v_im.shape[1]);
+092: cdef int depth = im.shape[2]
__pyx_v_depth = (__pyx_v_im.shape[2]);
093: cdef double noise
094: cdef int r, c, d, o
095:
096: # Initialize the noise generator
+097: cdef OpenSimplexEnv *ose = initOpenSimplex()
__pyx_v_ose = initOpenSimplex();
+098: cdef OpenSimplexGradients *osg = newOpenSimplexGradients(ose, seed)
__pyx_v_osg = newOpenSimplexGradients(__pyx_v_ose, __pyx_v_seed);
099:
100: # Loop through each element in the imay
+101: for r in prange(rows):
{
#ifdef WITH_THREAD
PyThreadState *_save;
_save = NULL;
if (PyGILState_Check()) {
Py_UNBLOCK_THREADS
}
__Pyx_FastGIL_Remember();
#endif
/*try:*/ {
__pyx_t_1 = __pyx_v_rows;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_3 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for lastprivate(__pyx_v_c) lastprivate(__pyx_v_d) reduction(+:__pyx_v_noise) lastprivate(__pyx_v_o) firstprivate(__pyx_v_r) lastprivate(__pyx_v_r)
#endif /* _OPENMP */
for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
{
__pyx_v_r = (int)(0 + 1 * __pyx_t_2);
/* Initialize private variables to invalid values */
__pyx_v_c = ((int)0xbad0bad0);
__pyx_v_d = ((int)0xbad0bad0);
__pyx_v_o = ((int)0xbad0bad0);
/* … */
/*finally:*/ {
/*normal exit:*/{
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
if (_save) {
Py_BLOCK_THREADS
}
#endif
goto __pyx_L5;
}
__pyx_L5:;
}
}
+102: for c in range(cols):
__pyx_t_4 = __pyx_v_cols;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_c = __pyx_t_6;
+103: for d in range(depth):
__pyx_t_7 = __pyx_v_depth;
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_d = __pyx_t_9;
104: # Calculate the simplex noise for the current x,y,z position
+105: noise = 0
__pyx_v_noise = 0.0;
+106: for o in range(octaves):
__pyx_t_10 = __pyx_v_octaves;
__pyx_t_11 = __pyx_t_10;
for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
__pyx_v_o = __pyx_t_12;
+107: noise += (noise3_Classic(ose, osg, r * frequency * 2**o, c * frequency * 2**o, d * frequency * 2**o) + 1) / 2 * persistence**o
__pyx_v_noise = (__pyx_v_noise + (((noise3_Classic(__pyx_v_ose, __pyx_v_osg, ((__pyx_v_r * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o))), ((__pyx_v_c * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o))), ((__pyx_v_d * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o)))) + 1.0) / 2.0) * pow(__pyx_v_persistence, ((double)__pyx_v_o))));
}
108:
109: # Add the noise to the current imay element
+110: im[r,c,d] += noise * amplitude + offset
__pyx_t_13 = __pyx_v_r;
__pyx_t_14 = __pyx_v_c;
__pyx_t_15 = __pyx_v_d;
*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_im.data + __pyx_t_13 * __pyx_v_im.strides[0]) ) + __pyx_t_14 * __pyx_v_im.strides[1]) ) + __pyx_t_15 * __pyx_v_im.strides[2]) )) += ((__pyx_v_noise * __pyx_v_amplitude) + __pyx_v_offset);
}
}
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
111:
112: # Free the memory used by the OpenSimplex environment and gradients
+113: free(osg)
free(__pyx_v_osg);
+114: free(ose)
free(__pyx_v_ose);
115:
+116: cdef void _add_simplex_noise_4D(float[:,:,:,:] im, double frequency, int octaves, double persistence, double amplitude, double offset, int seed) nogil:
static void __pyx_f_7nanopyx_4core_8generate_17noise_add_simplex__add_simplex_noise_4D(__Pyx_memviewslice __pyx_v_im, double __pyx_v_frequency, int __pyx_v_octaves, double __pyx_v_persistence, double __pyx_v_amplitude, double __pyx_v_offset, int __pyx_v_seed) {
CYTHON_UNUSED int __pyx_v_rows;
int __pyx_v_cols;
int __pyx_v_depth;
int __pyx_v_time;
double __pyx_v_noise;
int __pyx_v_r;
int __pyx_v_c;
int __pyx_v_d;
int __pyx_v_t;
int __pyx_v_o;
OpenSimplexEnv *__pyx_v_ose;
OpenSimplexGradients *__pyx_v_osg;
/* … */
/* function exit code */
}
+117: cdef int rows = im.shape[0]
__pyx_v_rows = (__pyx_v_im.shape[0]);
+118: cdef int cols = im.shape[1]
__pyx_v_cols = (__pyx_v_im.shape[1]);
+119: cdef int depth = im.shape[2]
__pyx_v_depth = (__pyx_v_im.shape[2]);
+120: cdef int time = im.shape[3]
__pyx_v_time = (__pyx_v_im.shape[3]);
121: cdef double noise
122: cdef int r, c, d, t, o
123:
124: # Initialize the noise generator
+125: cdef OpenSimplexEnv *ose = initOpenSimplex()
__pyx_v_ose = initOpenSimplex();
+126: cdef OpenSimplexGradients *osg = newOpenSimplexGradients(ose, seed)
__pyx_v_osg = newOpenSimplexGradients(__pyx_v_ose, __pyx_v_seed);
127:
128: # Loop through each element in the imay
+129: for r in prange(rows):
{
#ifdef WITH_THREAD
PyThreadState *_save;
_save = NULL;
if (PyGILState_Check()) {
Py_UNBLOCK_THREADS
}
__Pyx_FastGIL_Remember();
#endif
/*try:*/ {
__pyx_t_1 = __pyx_v_rows;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_3 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for lastprivate(__pyx_v_c) lastprivate(__pyx_v_d) reduction(+:__pyx_v_noise) lastprivate(__pyx_v_o) firstprivate(__pyx_v_r) lastprivate(__pyx_v_r) lastprivate(__pyx_v_t)
#endif /* _OPENMP */
for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
{
__pyx_v_r = (int)(0 + 1 * __pyx_t_2);
/* Initialize private variables to invalid values */
__pyx_v_c = ((int)0xbad0bad0);
__pyx_v_d = ((int)0xbad0bad0);
__pyx_v_o = ((int)0xbad0bad0);
__pyx_v_t = ((int)0xbad0bad0);
/* … */
/*finally:*/ {
/*normal exit:*/{
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
if (_save) {
Py_BLOCK_THREADS
}
#endif
goto __pyx_L5;
}
__pyx_L5:;
}
}
+130: for c in range(cols):
__pyx_t_4 = __pyx_v_cols;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_c = __pyx_t_6;
+131: for d in range(depth):
__pyx_t_7 = __pyx_v_depth;
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_d = __pyx_t_9;
+132: for t in range(time):
__pyx_t_10 = __pyx_v_time;
__pyx_t_11 = __pyx_t_10;
for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
__pyx_v_t = __pyx_t_12;
133: # Calculate the simplex noise for the current x,y,z,t position
+134: noise = 0
__pyx_v_noise = 0.0;
+135: for o in range(octaves):
__pyx_t_13 = __pyx_v_octaves;
__pyx_t_14 = __pyx_t_13;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_o = __pyx_t_15;
+136: noise += (noise4_Classic(ose, osg, r * frequency * 2**o, c * frequency * 2**o, d * frequency * 2**o, t * frequency * 2**o) + 1) / 2 * persistence**o
__pyx_v_noise = (__pyx_v_noise + (((noise4_Classic(__pyx_v_ose, __pyx_v_osg, ((__pyx_v_r * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o))), ((__pyx_v_c * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o))), ((__pyx_v_d * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o))), ((__pyx_v_t * __pyx_v_frequency) * pow(2.0, ((double)__pyx_v_o)))) + 1.0) / 2.0) * pow(__pyx_v_persistence, ((double)__pyx_v_o))));
}
137:
138: # Add the noise to the current imay element
+139: im[r,c,d,t] += noise * amplitude + offset
__pyx_t_16 = __pyx_v_r;
__pyx_t_17 = __pyx_v_c;
__pyx_t_18 = __pyx_v_d;
__pyx_t_19 = __pyx_v_t;
*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_im.data + __pyx_t_16 * __pyx_v_im.strides[0]) ) + __pyx_t_17 * __pyx_v_im.strides[1]) ) + __pyx_t_18 * __pyx_v_im.strides[2]) ) + __pyx_t_19 * __pyx_v_im.strides[3]) )) += ((__pyx_v_noise * __pyx_v_amplitude) + __pyx_v_offset);
}
}
}
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
140:
141: # Free the memory used by the OpenSimplex environment and gradients
+142: free(osg)
free(__pyx_v_osg);
+143: free(ose)
free(__pyx_v_ose);